import axios from "axios";

class Request {
  instance;
  constructor(config, interceptors = {}) {
    this.instance = axios.create(config);

    // 每个实例对应的拦截器
    // 请求拦截
    if (interceptors.requestInterceptor) {
      this.instance.interceptors.request.use(interceptors.requestInterceptor);
    }

    // 响应拦截
    if (interceptors.responseInterceptor) {
      this.instance.interceptors.response.use(interceptors.responseInterceptor);
    }

    // 全局都有的拦截器
    // 全局请求拦截
    this.instance.interceptors.request.use(
      (config) => {
        // console.log("全局请求拦截器成功拦截");
        return config;
      },
      (err) => {
        // console.log("全局请求错误拦截器");
        return err;
      }
    );

    // 全局响应拦截
    this.instance.interceptors.response.use(
      (res) => {
        // console.log("全局响应拦截器成功拦截");
        return res.data;
      },
      (err) => {
        // console.log("全局响应错误拦截器成功拦截");
        return err;
      }
    );
  }

  request(config) {
    return new Promise((reslove, reject) => {
      this.instance
        .request(config)
        .then((res) => {
          reslove(res);
        })
        .catch((err) => {
          reject(err);
        });
    });
  }

  get(config) {
    return this.request({ ...config, method: "GET" });
  }

  post(config) {
    return this.request({ ...config, method: "POST" });
  }

  deleta(config) {
    return this.request({ ...config, method: "DELETE" });
  }

  patch(config) {
    return this.request({ ...config, method: "PATCH" });
  }
}

export default Request;
